<?php
/**
 * @file   common.php
 * @date   2017-11-15 15:22:57
 * @author huwhis<huuwhois>
 * @version   0.0.1
 */

// 应用公共文件

/**inet_aton()
 * 将ip地址转为整数
 */
function inet_aton($ip = '')
{
    $array = array();
    $ipn = 0;
    if ($ip != '') {
        $array = explode('.', $ip);
        $arr = array_reverse($array);    // 其实不这么整也行, 结果就不能用MySQL自带的函数了
        $dd = 256;
        $ipn = 0;
        for ($i = 0; $i < 4; $i++) {
            $ipn += $arr[$i] * pow($dd, $i);
        }
    }
    return $ipn;
}

/**
 * inet_ntoa()
 * 将数据库取出来的ip整数形转为ip地址
 * 参数说明 $dd=256;第一次对256取余活的ip地址第4个,第二次活的第三个,依次类推    1`
 */
function inet_ntoa($ip = '0')
{
    $array = array();
    $dd = 256;
    for ($i = 4; $i > 0; $i--) {
        $array[$i] = $ip % $dd;
        $ip = intval(floor($ip / $dd));
    }
    return $array[1] . '.' . $array[2] . '.' . $array[3] . '.' . $array[4];
}

//获取浏览器信息
function browse_info()
{
    if (!empty($_SERVER['HTTP_USER_AGENT'])) {
        $br = $_SERVER['HTTP_USER_AGENT'];
        if (preg_match('/MSIE/i', $br)) {
            $br = 'MSIE';
        } elseif (preg_match('/Firefox/i', $br)) {
            $br = 'Firefox';
        } elseif (preg_match('/Edge/i', $br)) {
            $br = 'Edge';
        } elseif (preg_match('/Chrome/i', $br)) {
            $br = 'Chrome';
        } elseif (preg_match('/Safari/i', $br)) {
            $br = 'Safari';
        } elseif (preg_match('/Opera/i', $br)) {
            $br = 'Opera';
        } else {
            $br = 'Other';
        }
        return $br;
    } else {
        return 'unknow';
    }
}

//获取操作系统
function get_os()
{
    if (!empty($_SERVER['HTTP_USER_AGENT'])) {
        $os = $_SERVER['HTTP_USER_AGENT'];
        if (preg_match('/win/i', $os)) {
            $os = 'Windows';
        } elseif (preg_match('/mac/i', $os)) {
            $os = 'MAC';
        } elseif (preg_match('/linux/i', $os)) {
            $os = 'Linux';
        } elseif (preg_match('/unix/i', $os)) {
            $os = 'Unix';
        } elseif (preg_match('/bsd/i', $os)) {
            $os = 'BSD';
        } else {
            $os = 'Other';
        }
        return $os;
    } else {
        return 'unknow';
    }
}

/*无限级分类*/
function make_tree($list, $pk = 'id', $pid = 'pid', $child = 'child', $root = 0)
{
    $tree = array();
    foreach ($list as $key => $val) {
        if ($val[$pid] == $root) {
            unset($list[$key]);
            if (!empty($list)) {
                $child = make_tree($list, $pk, $pid, $child, $val[$pk]);
                if (!empty($child)) {
                    $val['child'] = $child;
                } else {
                    $val['child'] = array();
                }
            }
            $tree[] = $val;
        }
    }
    return $tree;
}

function obj_tree($list, $pk = 'id', $pid = 'pid', $child = 'child', $root = 0)
{
    $tree = array();
    foreach ($list as $key => $val) {
        if ($val->pid == $root) {
            unset($list->$key);
            if (!empty($list)) {
                $child = make_tree($list, $pk, $pid, $child, $val[$pk]);
                if (!empty($child)) {
                    $val->child = $child;
                } else {
                    $val->child = array();
                }
            }
            $tree[] = $val;
        }
    }
    return $tree;
}

function get_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
{
    $tree = array();
    $packData = array();
    foreach ($list as $data) {
//外层数组便脚标
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key => $val) {
        if ($val[$pid] == $root) {
//代表跟节点, 重点一
            $tree[] = &$packData[$key];
        } else {
//找到其父类,重点二
            $packData[$val[$pid]][$child][] = &$packData[$key];
        }
    }
    return $tree;
}

/**2017-12-4
 * set_stmp()
 * 配置发送邮件的邮箱服务smtp.163.com::huwhereis@163.com
 */
function send_email($smtpemailto = "", $emailsubject = "", $emailbody = "")
{
    $smtpserver = config('smtpserver'); //SMTP服务器
    $smtpserverport = config('smtpserverport'); //SMTP服务器端口
    $smtpusermail = config('smtpusermail'); //SMTP服务器的用户邮箱
    $smtpuser = config('smtpuser'); //SMTP服务器的用户帐号
    $smtppass = config('smtppass'); //SMTP服务器的用户密码
    $smtp = new \mylib\Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //这里面的一个true是表示使用身份验证,否则不使用身份验证.
    $emailtype = "HTML"; //信件类型，文本:text；网页：HTML
    $smtpemailfrom = $smtpusermail;

    $result = $smtp->sendMail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);

    return $result;
}

/**
 * 使用递归遍历获取文件夹的大小
 */

function totdir($dirname)
{
    static $tot; //这里把$tot定义为静态的,表示$tot全局只有这一个变量
    $ds = opendir($dirname); //创建一个目录资源, 传入的目录就是资源
    while ($file = readdir($ds)) { //从目录中读取到条目
        //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
        $path = $dirname . "/" . $file;

        //判断,如果是 . 或者 ..的目录就过滤掉
        if ($file != "." && $file != "..") {
            if (is_dir($path)) { //判断如果找到的是目录
                totdir($path); //如果得到是文件夹,然后递归调用一次方法传入的$path文件夹路径就是判断得到的文件夹赋值给$dirname
            } else {
                $tot += filesize($path);
            }
        }
    }
    return $tot . "    bytes";
}

/**
 * 递归删除文件夹
 */
function deldir($path)
{
    //如果是目录则继续
    if (is_dir($path)) {
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        foreach ($p as $val) {
            //排除目录中的.和..
            if ($val != "." && $val != "..") {
                //如果是目录则递归子目录，继续操作
                if (is_dir($path . $val)) {
                    //子目录中操作删除文件夹和文件
                    deldir($path . $val . '/');
                    //目录清空后删除空文件夹
                    @rmdir($path . $val . '/');
                } else {
                    //如果是文件直接删除
                    unlink($path . $val);
                }
            }
        }
    }
}

/**
 * 获取远程图片
 */
function downloadurlimg($body = '')
{
    $basehost = "http://" . \Think\Request::instance()->server('HTTP_HOST');

    $img_array = array();

    preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU", $body, $array1);
    preg_match_all("/(src|SRC)=[\"|'| ]{0,}(https:\/\/([^>]*)\.(gif|jpg|png))/isU", $body, $array2);
    $img_array = array_unique($array1[2]) + array_unique($array2[2]);
    // var_dump($img_array);
    // exit;
    $today = date('Ymd', time());

    $imgPath = ROOT_PATH . 'public' . DS . 'uploads' . DS . $today;
    // var_dump($imgPath);

    if (!is_dir($imgPath)) {
        if (mkdir($imgPath) == false) {
            return false;
        }
    }
    // var_dump($img_array);
    // exit;
    foreach ($img_array as $key => $value) {
        if (preg_match("#" . $basehost . "#i", $value)) {
            continue;
        }
        if (!preg_match("#^http:\/\/#i", $value) && !preg_match("#^https:\/\/#i", $value)) {
            continue;
        }
        $res = \mylib\GetImageByurl::getImageByurl($value, '', $imgPath);
        // var_dump($res);
        if ($res) {
            $body = str_replace($value, '/uploads/'. $today . '/' . $res, $body);
        }
    }

    return $body;
}
